#ifndef BST_H
#include <stdbool.h>
typedef int BSTDataType;
typedef struct BSTNode
{
    BSTDataType data;
    struct BSTNode *left;
    struct BSTNode *right;
} BSTNode;
typedef struct BST
{
    BSTNode *root;
    void (*init)(struct BST *self);
    bool (*isEmpty)(struct BST *self);                                 // 空返回0,非空返回非0数.
    int (*add)(struct BST *self, BSTDataType data);                    // 添加
    int (*insert)(struct BST *self, BSTDataType data);                 // 插入--同add
    int (*remove)(struct BST *self, BSTDataType data);                 // 删除
    int (*search)(struct BST *self, BSTDataType data, BSTNode **node); // 查找
    int (*size)(struct BST *self, int *result);                        // 参数接受:树的大小
    int (*height)(struct BST *self);                                   // 返回树的高度
    int (*contains)(struct BST *self, BSTDataType data, bool *result); // 是否包含
} BST;
// 初始化
BST *newBST();
void BSTInit(BST *self);
// 判空
bool BSTIsEmpty(BST *self);
// 插入操作
int BSTInsert(BST *self, BSTDataType data);
// 删除操作
int BSTRemove(BST *self, BSTDataType data);
// 查找操作
int BSTSearch(BST *self, BSTDataType data, BSTNode **node);
// 返回树的大小
int BSTSize(BST *self, int *result);
// 是否包含
int BSTContains(BST *self, BSTDataType data, bool *result);
#endif